#include <QCoreApplication>  // Lambda表达式+递归+if else逻辑：实现连续打印斐波那契数列
#include <iostream>
#include <functional>

int main(int argc, char *argv[])
{
    std::function<int(int)>fab;
    fab = [&fab](int i){        //  因为不能自己捕捉自己，所以这里不能用auto fab=[&fab] 来声明。
//  这里之所以得用Lambda表达式，因为这是在main函数里实现fab函数调用自己。
        if (i == 0){
            return i;
        }
        else if (i == 1){
            return i;
        }
            else {
            return fab(i - 1) + fab(i - 2); // return后是不用加等号的
        }
    };
    auto max = 8;  // 声明for循环迭代次数
    for(auto i= 0; i < max; ++i){  //这里用++i比i++更节省内存
          std::cout<< fab(i)<< std::endl;
    }

}

// 注意1：以上结构需要优化：将switch-case替代多层if else：具体操作见Exercise_04
// 注意2：以上我们也可以在一个子函数中插入Lambda表达式，然后通过main函数调用子函数来实现，详情见Exercise_05
